/*
 * asignación de la categoria.
 */

/**
 *
 * @author Juan Padilla Delgado
 * MEMORISTA INGENIERÍA INFORMÁTICA
 * TRABAJO DE TÍTULO
 */

package triaje;
public class Categoria {
    
    int valorglasgow;
    int cbAO, cbRM, cbRV; //para obtener el valor del galsgow y permitir correcciones
    int ps=-1, pd=-1; //para obtener la PAM inmediatamente

    public int getPd() {
        return pd;
    }

    public void setPd(int pd) {
        this.pd = pd;
    }

    public int getPs() {
        return ps;
    }

    public void setPs(int ps) {
        this.ps = ps;
    }

    public int getCbAO() {
        return cbAO;
    }

    public void setCbAO(int cbAO) {
        this.cbAO = cbAO;
    }

    public int getCbRM() {
        return cbRM;
    }

    public void setCbRM(int cbRM) {
        this.cbRM = cbRM;
    }

    public int getCbRV() {
        return cbRV;
    }

    public void setCbRV(int cbRV) {
        this.cbRV = cbRV;
    }

    public int getValorglasgow() {
        return valorglasgow;
    }

    public void setValorglasgow(int valorglasgow) {
        this.valorglasgow = valorglasgow;
    }

    
            
    public int FrecuenciaCardiaca(int fc)
    {
        if (fc<0) return 0; //error
        else if (fc==0) return 1; //C1
        else if (fc<45 || 144<fc) return 2; //C2
        else if ((45<=fc && fc<=60) || (100<=fc && fc<=144)) return 3; //C3
        else return 5; //Normal, se asume C5
    }
    
    //La PAM es aproximada, no es un valor preciso. 
    //pas; presión sistólica, pad; presión diastólica
    public int PAM(int pas, int pad)
    {
        int pam;
        pam = ((2*pad)+pas)/3;
        return pam;
    }
    
    //s; presión sistólica, d; presión diastólica, sa; síntoma o signo asociado
    public int PresionArterial(int s, int d, int sa)
    {
        int categoria=5;
        int pam; //presión arterial media. Fórmula de aproximación --> PAM = ((2*PAD)+PAS)/3
        pam = PAM(s, d);
        
        if (sa<1 || s<0 || d<0) categoria=0; //error
        else if (sa>=1 && sa<=6)
        {    
            if (sa==1 || sa==2) //1,compromiso de conciencia, 2; señales de hipo perfusión
            {
                if (s<=90 || pam<=60) categoria=2; //C2                
            }
            else if (3<=sa && sa<=6) //3; disnea, 4; dolor torácico, 5; signos de focalización neurológico, 6; cefalea
            {
                if (s>200 || d>110 || pam >130) categoria=2; //C2 
            }
        }
        else if (sa==12) //12; sin signos neurológicos
        { 
            if (s>200 || d>110 || pam >130) categoria=3; //C3
        }
        else{ 
            categoria=5; //Normal
        }
        return categoria;
    }
    
    //s; presión sistólica, d; presión diastólica, sa; síntoma o signo asociado, pam; presión arterial media
    public int PresionArterial(int s, int d, int sa, int pam)
    {
        int categoria=-1;
                
        if (sa<1 || sa>6 || s<0 || d<0) categoria=0; //error
        else if (sa>=1 && sa<=6) 
        {    
            if (sa==1 || sa==2) //1,compromiso de conciencia, 2; señales de hipo perfusión
            {
                if (s<=90 || pam<=60) categoria=2; //C2                
            }
            else if (3<=sa && sa<=6) //3; disnea, 4; dolor torácico, 5; signos de focalización neurológico, 6; cefalea
            {
                if (s>200 || d>110 || pam >130) categoria=2; //C2 
            }
        }
        else if (sa==12) //12; sin signos neurológicos
        { 
            if (s>200 || d>110 || pam >130) categoria=3; //C3
        }
        else{ 
            categoria=5; //Normal
        }
        return categoria;
    }
    
    //fr; frecuencia respiratoria
    public int FrecuenciaRespiratoria(int fr)
    {
        if (fr>30) return 2; //C2
        else return 5; //Normal
    }
    
    //s; saturación, sa; síntoma o signo asociado
    public int Saturacion(int s, int sa)
    {
        int categoria=-1;
        if (s<90)
        {
            if (sa==1 || sa==2 || sa==3) //1; disnea, 2; cianosis, 3; estridor con palidez 
                categoria=2; //C2
        }
        else if (90<=s && s<94)
        {
            if (sa==4) //4; sin compromiso ventilatorio
                categoria=3; //C3
        } 
        else categoria=5; //Normal
        
        return categoria;
    }
    
    //gc; glicemia capilar, hi; hiperglicemia incidental, sa; síntoma o signo asociado
    public int GlicemiaCapilar(int gc, boolean hi, int sa)
    {
        if (gc<60) return 2; //C2
        else if (hi)
        {
            if (sa==1 || sa==2) //1; Compromiso ventilatorio, 2; compromiso de conciencia
                return 2; //C2
        }
        else if (gc>350)
        {
            if (sa==3 || sa==4 || sa==5) //3; poliuria, 4; polidipsia, 5; polifagia
                return 3; //C3
        }
        return 5; //Normal
    }
    
    //eva; escala de dolor eva, sa; síntoma o signo asociado
    public int Eva(int eva, int sa)
    {
        int categoria=-1;
        if (eva<0 || 10<eva) categoria=0; //error
        else if (7<eva)
        {
            if (eva<8 && (sa==1 || sa==2)) //1; súbito, 2; síntomas vegetativos
                categoria=2; //C2
            else categoria=3; //C3
        }
        else if (5<=eva && eva<=7) categoria=4; //C4
        else if (eva<5) categoria=5; //C5
        
        return categoria;
    }
    
    //g; valor glasgow, sa; síntoma o signo asociado
    public int Glasgow(int g, int sa)
    {
        int categoria=-1;
        
        if (9<=g && g<=13) categoria=2; //C2
        else if (13<g && sa==1) // 1; traumatismo encefálo craneano
            categoria=3; //C3
        else categoria=5; //Normal
        
        return categoria;
    }
    public int ObtenerGlasgow()
    {
        valorglasgow = cbRM + cbRV + cbAO;
        return valorglasgow;
    }
    public int ObtenerPAM()
    {
        if(ps!=-1 && pd!=-1)  return PAM(ps,pd);
        else    return -1;
    }
}
